home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 1992 August / info-mac-1992.iso / Language (lang) / Lazy-Scheme / Examples / mémo-trial < prev    next >
Text File  |  1992-03-05  |  838b  |  31 lines

  1. {Easy memo-functions in help: try (f 100) and more, but you should have memory especially stack !}
  2.  
  3.  
  4. (define (lookup o t s f)
  5.   (letrec [((lookup t)
  6.              (cond (null? t) (f)
  7.                    (let [(pr (0 t))]
  8.                         (cond (equal? (0 pr) o) (s pr)
  9.                               (lookup (-1 t))))))]
  10.           (lookup t)))
  11.  
  12. (define (memo p)
  13.   (let [(t ())]
  14.        (lambda a
  15.           (lookup a
  16.                   t
  17.                   (lambda(pr) (-1 pr))
  18.                   (lambda()
  19.                     (let [(v (apply p a))]
  20.                          (=! t (force (cons (cons a v) t)))
  21.                          v))))))
  22.  
  23. (defmacro (defmemo f | b)
  24.   (cond (cons? f) `(define ,(0 f) (memo (lambda ,(-1 f) ,@b)))
  25.         `(define ,f (memo ,@b))))
  26.  
  27. (defmemo (f n)
  28.   (cond (<? n 2) 1
  29.         (+ (f (1- n))(f (- n 2)))))
  30.  
  31.